import csv
import json

import pandas as pd

from image_create import plot_hospital_visits, plot_monthly_visits

UPLOAD_FOLDER = './images/'
dataSet_URL = './dataSet.csv'
UPLOAD_FOLDER_POSITIVES = './positives_test.csv'
# 读取初始数据集
def read_csv_file(filename):
    """
    读取 CSV 文件并返回数据的列表，其中每个元素都是一个字典。
    """
    data = []
    with open(filename, mode='r', encoding='utf-8') as file:
        csv_reader = csv.DictReader(file)
        for row in csv_reader:
            data.append(row)
    return data

# 首页数据上传
def homeData_upload(df):
    # 统计总条数
    stat_count = df.shape[0]
    # 找出最大月药品金额
    max_monthly_medical_expense = df['月药品金额_MAX'].max()
    # 计算“月就诊天数”的平均值
    average_days_per_month = round(df['月就诊天数_AVG'].mean(), 0)
    # 找出“就诊的月数”的最大值
    max_monthly_visits = df['就诊的月数'].max()

    df = pd.read_csv(dataSet_URL)
    # 假设“就诊的月数”是列名
    if '就诊的月数' in df.columns:
        monthly_visits = df['就诊的月数'].value_counts().sort_index().reset_index()
        monthly_visits.columns = ['月份', '病患数量']
        pie_data = [{'label': str(month), 'value': int(count)} for month, count in monthly_visits.values]
        # 假设 table_data 是 DataFrame 的一部分或全部
    # 假设“医院编码_NN”是医院编码的列名
    if '医院编码_NN' in df.columns:
        # 计算每个医院的病患数量
        hospital_visits = df.groupby('医院编码_NN').size().reset_index(name='病患数量')
        # 提取x轴和y轴的数据
        x_axis_data = hospital_visits['医院编码_NN'].tolist()
        y_axis_data = hospital_visits['病患数量'].tolist()
        chart_data = {
            'xAxis': x_axis_data,
            'yAxis': y_axis_data
        }
        line_data = json.dumps(chart_data)

    # 使用 Pandas 的 read_csv 读取 CSV 文件
    riskUsers = pd.read_csv(UPLOAD_FOLDER_POSITIVES)

    columns_to_keep = [
        '月就诊天数_AVG',
        '月就诊次数_MAX',
        '药品费自费金额_SUM',
        '检查费发生金额_SUM',
        '非账户支付金额_SUM',
        '基本统筹基金支付金额_SUM'
    ]
    # 筛选需要的列
    riskUsers = riskUsers[columns_to_keep]
    riskUsers_renamed = riskUsers.rename(columns={
        '月就诊天数_AVG': 'monthlyAvgDays',
        '月就诊次数_MAX': 'monthlyMaxVisits',
        '药品费自费金额_SUM': 'totalDrugCost',
        '检查费发生金额_SUM': 'totalExamCost',
        '非账户支付金额_SUM': 'nonAccountPayment',
        '基本统筹基金支付金额_SUM': 'basicFundPayment'
    })
    riskUsers = riskUsers_renamed
    riskUsers.insert(0, 'id', range(1, len(riskUsers) + 1))
    # table_data_json = riskUsers.to_json(orient='records', force_ascii=False)
    return {
        'stat_count': stat_count,
        'max_monthly_medical_expense': max_monthly_medical_expense,
        'average_days_per_month': average_days_per_month,
        'max_monthly_visits': max_monthly_visits,
        'pie_data':pie_data,
        'line_data':line_data,
        'table_data': riskUsers.to_dict(orient='records')
    }
